home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_lrm / chap02.doc < prev    next >
Text File  |  1996-01-30  |  26KB  |  1,322 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. The following document is a draft  of  the  corresponding  chapter  of  the
  7. version  of  the  Ada  Reference  Manual  produced  in response to the Ansi
  8. Canvass.  It is given a limited circulation  to  Ada  implementers  and  to
  9. other groups contributing comments (according to the conventions defined in
  10. RRM.comments).  This draft should not be referred to in any publication.
  11.  
  12.  
  13.  
  14.                       ANSI-RM-02-v23 - Draft Chapter
  15.  
  16.                             2  Lexical Elements
  17.                                 version 23
  18.  
  19.                                  83-02-11
  20.  
  21.  
  22. This revision has addressed all comments up to #5795
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.                             2. Lexical Elements
  78.  
  79.  
  80.  
  81. The  text  of  a program consists of the texts of one or more compilations.
  82. The text of a compilation is a sequence of lexical elements, each  composed
  83. of  characters;   the  rules  of  composition  are  given  in this chapter.
  84. Pragmas, which provide certain  information  for  the  compiler,  are  also
  85. described in this chapter.
  86.  
  87. References:   character  2.1, compilation 10.1, lexical element 2.2, pragma
  88. 2.8
  89.  
  90.  
  91.  
  92.  
  93. 2.1  Character Set
  94.  
  95.  
  96. The only  characters allowed in the text  of  a  program  are  the  graphic
  97. characters  and  format effectors.  Each graphic character corresponds to a
  98. unique code of the ISO seven-bit coded character set  (ISO  standard  646),
  99. and  is  represented  (visually)  by  a  graphical  symbol.   Some  graphic
  100. characters are represented by different graphical  symbols  in  alternative
  101. national  representations of the ISO character set.  The description of the
  102. language definition in  this  standard  reference  manual  uses  the  ASCII
  103. graphical  symbols,  the ANSI graphical representation of the ISO character
  104. set.
  105.  
  106.     graphic_character ::= basic_graphic_character
  107.        | lower_case_letter | other_special_character
  108.  
  109.     basic_graphic_character ::=
  110.          upper_case_letter | digit
  111.        | special_character | space_character
  112.  
  113.     basic_character ::=
  114.          basic_graphic_character | format_effector
  115.  
  116. The basic character  set  is  sufficient  for  writing  any  program.   The
  117. characters  included  in each of the categories of basic graphic characters
  118. are defined as follows:
  119.  
  120. (a)  upper case letters
  121.      A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  122.  
  123. (b)  digits
  124.      0 1 2 3 4 5 6 7 8 9
  125.  
  126.  
  127.  
  128.  
  129.                                    2 - 1
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138. (c)  special characters
  139.      " # & ' ( ) * + , - . / : ; < = > _ |
  140.  
  141. (d)  the space character
  142.  
  143. Format effectors are the  ISO  (and  ASCII)  characters  called  horizontal
  144. tabulation, vertical tabulation, carriage return, line feed, and form feed.
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                    2 - 2
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204. The  characters  included  in  each  of the remaining categories of graphic
  205. characters are defined as follows:
  206.  
  207. (e)  lower case letters
  208.      a b c d e f g h i j k l m n o p q r s t u v w x y z
  209.  
  210. (f)  other special characters
  211.      ! $ % ? @ [ \ ] ^ ` { }
  212.  
  213. Allowable replacements for the special characters vertical bar  (|),  sharp
  214. (#), and quotation (") are defined in section 2.10.
  215.  
  216. Notes:
  217.  
  218. The  ISO  character  that  corresponds to the sharp graphical symbol in the
  219. ASCII representation appears as a pound  sterling  symbol  in  the  French,
  220. German, and United Kingdom standard national representations.  In any case,
  221. the  font  design  of  graphical  symbols (for example, whether they are in
  222. italic or bold typeface) is not part of the ISO standard.
  223.  
  224. The meanings of the acronyms used in this section  are  as  follows:   ANSI
  225. stands for American National Standards Institute, ASCII stands for American
  226. Standard Code for Information Interchange, and ISO stands for International
  227. Organization for Standardization.
  228.  
  229. The following names are used when referring to special characters and other
  230. special characters:
  231.  
  232.     symbol     name                        symbol     name
  233.  
  234.       "        quotation                     >        greater than
  235.       #        sharp                         _        underline
  236.       &        ampersand                     |        vertical bar
  237.       '        apostrophe                    !        exclamation mark
  238.       (        left parenthesis              $        dollar
  239.       )        right parenthesis             %        percent
  240.       *        star, multiply                ?        question mark
  241.       +        plus                          @        commercial at
  242.       ,        comma                         [        left square bracket
  243.       -        hyphen, minus                 \        back-slash
  244.       .        dot, point, period            ]        right square bracket
  245.       /        slash, divide                 ^        circumflex
  246.       :        colon                         `        grave accent
  247.       ;        semicolon                     {        left brace
  248.       <        less than                     }        right brace
  249.       =        equal                         `     tilde
  250.  
  251.  
  252.  
  253.  
  254. 2.2  Lexical Elements, Separators, and Delimiters
  255.  
  256.  
  257. The  text  of  a program consists of the texts of one or more compilations.
  258. The text of each compilation is a sequence of  separate  lexical  elements.
  259.  
  260.  
  261.                                    2 - 3
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270. Each  lexical  element is either a delimiter, an identifier (which may be a
  271. reserved word), a numeric literal, a character literal, a  string  literal,
  272. or  a  comment.   The  effect  of  a program depends only on the particular
  273. sequences of lexical elements that form  its  compilations,  excluding  the
  274. comments, if any.
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                    2 - 4
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336. In  some  cases  an  explicit  separator  is  required to separate adjacent
  337. lexical elements (namely, when  without  separation,  interpretation  as  a
  338. single  lexical  element  is  possible).   A  separator  is  any of a space
  339. character, a format effector, or the end of a line.  A space character is a
  340. separator except within a comment, a string literal, or a  space  character
  341. literal.   Format  effectors  other  than  horizontal tabulation are always
  342. separators.  Horizontal tabulation is a separator except within a  comment.
  343.  
  344. The end of a line is always a separator.  The language does not define what
  345. causes  the end of a line.  However if, for a given implementation, the end
  346. of a line is signified by one or more  characters,  then  these  characters
  347. must  be format effectors other than horizontal tabulation.  In any case, a
  348. sequence of one or more format effectors other than  horizontal  tabulation
  349. must cause at least one end of line.
  350.  
  351. One  or  more  separators  are  allowed  between  any  two adjacent lexical
  352. elements, before the first of each compilation,  or  after  the  last.   At
  353. least  one separator is required between an identifier or a numeric literal
  354. and an adjacent identifier or numeric literal.
  355.  
  356. A delimiter is either one of the following special characters (in the basic
  357. character set)
  358.  
  359.     & ' ( ) * + , - . / : ; < = > |
  360.  
  361. or one of the following compound delimiters each composed of  two  adjacent
  362. special characters
  363.  
  364.     =>   ..   **   :=   /=   >=   <=   <<   >>   <>
  365.  
  366. Each  of the special characters listed for single character delimiters is a
  367. single delimiter except if this character is  used  as  a  character  of  a
  368. compound  delimiter,  or  as  a  character  of  a  comment, string literal,
  369. character literal, or numeric literal.
  370.  
  371. The remaining forms of lexical element are described in other  sections  of
  372. this chapter.
  373.  
  374. Notes:
  375.  
  376. Each  lexical  element  must  fit on one line, since the end of a line is a
  377. separator.  The quotation, sharp, and underline  characters,  likewise  two
  378. adjacent  hyphens,  are  not delimiters, but may form part of other lexical
  379. elements.
  380.  
  381. The following names are used when referring to compound delimiters:
  382.  
  383.     delimiter     name
  384.  
  385.        =>         arrow
  386.        ..         double dot
  387.        **         double star, exponentiate
  388.        :=         assignment (pronounced: "becomes")
  389.        /=         inequality (pronounced: "not equal")
  390.        >=         greater than or equal
  391.  
  392.  
  393.                                    2 - 5
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.        <=         less than or equal
  403.        <<         left label bracket
  404.        >>         right label bracket
  405.        <>         box
  406.  
  407. References:  character literal 2.5, comment 2.7, compilation  10.1,  format
  408. effector 2.1, identifier 2.3, numeric literal 2.4, reserved word 2.9, space
  409. character 2.1, special character 2.1, string literal 2.6
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                    2 - 6
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468. 2.3  Identifiers
  469.  
  470.  
  471. Identifiers are used as names and also as reserved words.
  472.  
  473.     identifier ::=
  474.        letter {[underline] letter_or_digit}
  475.  
  476.     letter_or_digit ::= letter | digit
  477.  
  478.     letter ::= upper_case_letter | lower_case_letter
  479.  
  480. All  characters  of  an identifier are significant, including any underline
  481. character inserted between a letter or digit  and  an  adjacent  letter  or
  482. digit.   Identifiers  differing  only in the use of corresponding upper and
  483. lower case letters are considered as the same.
  484.  
  485. Examples:
  486.  
  487.     COUNT      X    get_symbol   Ethelyn   Marion
  488.  
  489.     SNOBOL_4   X1   PageCount    STORE_NEXT_ITEM
  490.  
  491. Note:
  492.  
  493. No space is allowed within an identifier since a space is a separator.
  494.  
  495. References:  digit 2.1, lower case letter 2.1, name 4.1, reserved word 2.9,
  496. separator 2.2, space character 2.1, upper case letter 2.1
  497.  
  498.  
  499.  
  500.  
  501. 2.4  Numeric Literals
  502.  
  503.  
  504. There are two classes of  numeric  literals:   real  literals  and  integer
  505. literals.   A  real literal is a numeric literal that includes a point;  an
  506. integer literal is a numeric literal without a point.   Real  literals  are
  507. the literals of the type universal_real.  Integer literals are the literals
  508. of the type universal_integer.
  509.  
  510.     numeric_literal ::= decimal_literal | based_literal
  511.  
  512.  
  513. References:  literal 4.2, universal_integer type 3.5.4, universal_real type
  514. 3.5.6
  515.  
  516.  
  517.  
  518.  
  519. 2.4.1  Decimal Literals
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                    2 - 7
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534. A  decimal  literal  is  a  numeric  literal  expressed in the conventional
  535. decimal notation (that is, the base is implicitly ten).
  536.  
  537.     decimal_literal ::= integer [.integer] [exponent]
  538.  
  539.     integer  ::= digit {[underline] digit}
  540.  
  541.     exponent ::= E [+] integer | E - integer
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.                                    2 - 8
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600. An underline character  inserted  between  adjacent  digits  of  a  decimal
  601. literal does not affect the value of this numeric literal.  The letter E of
  602. the exponent, if any, can be written either in lower case or in upper case,
  603. with the same meaning.
  604.  
  605. An  exponent  indicates  the power of ten by which the value of the decimal
  606. literal without the exponent is to be multiplied to obtain the value of the
  607. decimal literal with the exponent.  An exponent for an integer literal must
  608. not have a minus sign.
  609.  
  610. Examples:
  611.  
  612.     12        0      1E6    123_456     --  integer literals
  613.  
  614.     12.0      0.0    0.456  3.14159_26  --  real literals
  615.  
  616.     1.34E-12  1.0E+6  --  real literals with exponent
  617.  
  618.  
  619. Notes:
  620.  
  621. Leading zeros are allowed.  No space is allowed in a numeric  literal,  not
  622. even between constituents of the exponent, since a space is a separator.  A
  623. zero exponent is allowed for an integer literal.
  624.  
  625. References:   digit  2.1,  lower  case  letter  2.1,  numeric  literal 2.4,
  626. separator 2.2, space character 2.1, upper case letter 2.1
  627.  
  628.  
  629.  
  630.  
  631. 2.4.2  Based Literals
  632.  
  633.  
  634. A based literal is a numeric literal expressed in a form that specifies the
  635. base explicitly.  The base must be at least two and at most sixteen.
  636.  
  637.     based_literal ::=
  638.        base # based_integer [.based_integer] # [exponent]
  639.  
  640.     base ::= integer
  641.  
  642.     based_integer ::=
  643.        extended_digit {[underline] extended_digit}
  644.  
  645.     extended_digit ::= digit | letter
  646.  
  647. An underline character inserted between adjacent digits of a based  literal
  648. does  not  affect  the  value  of  this  numeric literal.  The base and the
  649. exponent, if any, are in decimal notation.  The  only  letters  allowed  as
  650. extended  digits  are  the  letters  A through F for the digits ten through
  651. fifteen.  A letter in a based literal (either  an  extended  digit  or  the
  652. letter  E  of  an exponent) can be written either in lower case or in upper
  653. case, with the same meaning.
  654.  
  655.  
  656.  
  657.                                    2 - 9
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666. The conventional meaning of based notation is assumed;  in  particular  the
  667. value of each extended digit of a based literal must be less than the base.
  668. An exponent indicates the power of the base by which the value of the based
  669. literal without the exponent is to be multiplied to obtain the value of the
  670. based literal with the exponent.
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.                                   2 - 10
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732. Examples:
  733.  
  734.     2#1111_1111#     16#FF#        016#0FF#    --  integer literals of value 255
  735.     16#E#E1          2#1110_0000#              --  integer literals of value 224
  736.     16#F.FF#E+2      2#1.1111_1111_111#E11     --  real literals of value 4095.0
  737.  
  738. References:   digit 2.1, exponent 2.4.1, letter 2.3, lower case letter 2.1,
  739. numeric literal 2.4, upper case letter 2.1
  740.  
  741.  
  742.  
  743.  
  744. 2.5  Character Literals
  745.  
  746.  
  747. A character  literal   is  formed  by  enclosing  one  of  the  95  graphic
  748. characters  (including  the  space)  between  two apostrophe characters.  A
  749. character literal has a value that belongs to a character type.
  750.  
  751.     character_literal ::= 'graphic_character'
  752.  
  753. Examples:
  754.  
  755.     'A'   '*'   '''   ' '
  756.  
  757. References:  character type 3.5.2,  graphic  character  2.1,  literal  4.2,
  758. space character 2.1
  759.  
  760.  
  761.  
  762.  
  763. 2.6  String Literals
  764.  
  765.  
  766. A  string  literal  is formed by a sequence of graphic characters (possibly
  767. none) enclosed between two quotation characters used as string brackets.
  768.  
  769.     string_literal ::= "{graphic_character}"
  770.  
  771. A string literal has a  value  that  is  a  sequence  of  character  values
  772. corresponding  to  the  graphic characters of the string literal apart from
  773. the quotation character itself.  If a quotation character value  is  to  be
  774. represented  in  the  sequence of character values, then a pair of adjacent
  775. quotation characters must be written at the corresponding place within  the
  776. string  literal.   (This  means  that  a  string  literal that includes two
  777. adjacent quotation characters is never interpreted as two  adjacent  string
  778. literals.)
  779.  
  780. The  length  of  a  string literal is the number of character values in the
  781. sequence represented.  (Each doubled quotation character is  counted  as  a
  782. single character.)
  783.  
  784. Examples:
  785.  
  786.  
  787.  
  788.  
  789.                                   2 - 11
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.     "Message of the day:"
  799.  
  800.     ""                     --  an empty string literal
  801.     " "   "A"   """"       --  three string literals of length 1
  802.  
  803.     "Characters such as $, %, and } are allowed in string literals"
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.                                   2 - 12
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864. Note:
  865.  
  866. A  string  literal  must fit on one line since it is a lexical element (see
  867. 2.2).  Longer sequences of graphic character  values  can  be  obtained  by
  868. catenation  of string literals.  Similarly catenation of constants declared
  869. in the package ASCII can be used to obtain sequences  of  character  values
  870. that   include   nongraphic   character   values   (the  so-called  control
  871. characters).  Examples of such uses of catenation are given below:
  872.  
  873.     "FIRST PART OF A SEQUENCE OF CHARACTERS " &
  874.     "THAT CONTINUES ON THE NEXT LINE"
  875.  
  876.     "sequence that includes the" & ASCII.ACK & "control character"
  877.  
  878. References:   ascii  predefined  package  C,  catenation  operation  4.5.3,
  879. character  value 3.5.2, constant 3.2.1, declaration 3.1, end of a line 2.2,
  880. graphic character 2.1, lexical element 2.2
  881.  
  882.  
  883.  
  884.  
  885. 2.7  Comments
  886.  
  887.  
  888. A comment starts with two adjacent hyphens and extends up to the end of the
  889. line.  A comment can appear on any line of  a  program.   The  presence  or
  890. absence  of  comments  has  no  influence  on whether a program is legal or
  891. illegal.  Furthermore,  comments do not influence the effect of a  program;
  892. their sole purpose is the enlightenment of the human reader.
  893.  
  894. Examples:
  895.  
  896.     --  the last sentence above echoes the Algol 68 report
  897.  
  898.     end;  --  processing of LINE is complete
  899.  
  900.     --  a long comment may be split onto
  901.     --  two or more consecutive lines
  902.  
  903.     ----------------  the first two hyphens start the comment
  904.  
  905. Note:
  906.  
  907. Horizontal  tabulation  can   be used in comments, after the double hyphen,
  908. and is equivalent to one or more spaces (see 2.2).
  909.  
  910. References:  end of a line 2.2, illegal 1.6, legal 1.6, space character 2.1
  911.  
  912.  
  913.  
  914.  
  915. 2.8  Pragmas
  916.  
  917.  
  918.  
  919.  
  920.  
  921.                                   2 - 13
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930. A pragma is used to convey information to the compiler.   A  pragma  starts
  931. with the reserved word pragma followed by an identifier that is the name of
  932. the pragma.
  933.  
  934.     pragma ::=
  935.        pragma identifier [(argument_association {, argument_association})];
  936.  
  937.     argument_association ::=
  938.          [argument_identifier =>] name
  939.        | [argument_identifier =>] expression
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.                                   2 - 14
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996. Pragmas are only allowed at the following places in a program:
  997.  
  998.   -  After  a  semicolon  delimiter,  but  not  within  a  formal  part  or
  999.      discriminant part.
  1000.  
  1001.   -  At any place where the syntax rules allow a  construct  defined  by  a
  1002.      syntactic  category  whose  name ends with "declaration", "statement",
  1003.      "clause", or "alternative", or one of the syntactic categories variant
  1004.      and exception handler;  but not in place of such a construct.  Also at
  1005.      any place where a compilation unit would be allowed.
  1006.  
  1007. Additional restrictions exist for the placement of specific pragmas.
  1008.  
  1009. Some  pragmas  have  arguments.   Argument  associations  can   be   either
  1010. positional  or named as for parameter associations of subprogram calls (see
  1011. 6.4).  Named associations are,  however,  only  possible  if  the  argument
  1012. identifiers are defined.  A name given in an argument must be either a name
  1013. visible at the place of the pragma or an identifier specific to the pragma.
  1014.  
  1015. The pragmas defined by the language are described in Annex B:  they must be
  1016. supported  by  every  implementation.   In  addition, an implementation may
  1017. provide implementation-defined pragmas, which must  then  be  described  in
  1018. Appendix  F.   An  implementation  is  not  allowed to define pragmas whose
  1019. presence or absence influences  the  legality  of  the  text  outside  such
  1020. pragmas.   Consequently,  the  legality of a program does not depend on the
  1021. presence or absence of implementation-defined pragmas.
  1022.  
  1023. A pragma that is not language-defined has no effect if  its  identifier  is
  1024. not  recognized  by  the  (current)  implementation.  Furthermore, a pragma
  1025. (whether language-defined or implementation-defined) has no effect  if  its
  1026. placement  or  its  arguments  do not correspond to what is allowed for the
  1027. pragma.  The region of text over which a pragma has an  effect  depends  on
  1028. the pragma.
  1029.  
  1030. Examples:
  1031.  
  1032.     pragma LIST(OFF);
  1033.     pragma OPTIMIZE(TIME);
  1034.     pragma INLINE(SETMASK);
  1035.     pragma SUPPRESS(RANGE_CHECK, ON => INDEX);
  1036.  
  1037. Note:
  1038.  
  1039. It  is  recommended  (but not required) that implementations issue warnings
  1040. for pragmas that are not recognized and therefore ignored.
  1041.  
  1042. References:  compilation unit 10.1, delimiter 2.2, discriminant part 3.7.1,
  1043. exception handler 11.2, expression 4.4, formal part  6.1,  identifier  2.3,
  1044. implementation-defined pragma F, language-defined pragma B, legal 1.6, name
  1045. 4.1,  reserved word 2.9, statement 5, static expression 4.9, variant 3.7.3,
  1046. visibility 8.3
  1047.  
  1048. Categories ending with  "declaration"  comprise:   basic  declaration  3.1,
  1049. component   declaration  3.7,  entry  declaration  9.5,  generic  parameter
  1050. declaration 12.1
  1051.  
  1052.  
  1053.                                   2 - 15
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062. Categories ending with "clause" comprise:  alignment clause 13.4, component
  1063. clause 13.4, context clause 10.1.1, representation clause 13.1, use  clause
  1064. 8.4, with clause 10.1.1
  1065.  
  1066. Categories  ending  with "alternative" comprise:  accept alternative 9.7.1,
  1067. case statement alternative 5.4, delay alternative 9.7.1, select alternative
  1068. 9.7.1, selective wait alternative 9.7.1, terminate alternative 9.7.1
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.                                   2 - 16
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128. 2.9  Reserved Words
  1129.  
  1130.  
  1131. The identifiers listed below are called reserved words and are reserved for
  1132. special significance in the language.  For readability of this manual,  the
  1133. reserved words appear in lower case boldface.
  1134.  
  1135.  
  1136.     abort       declare      generic    of           select
  1137.     abs         delay        goto       or           separate
  1138.     accept      delta                   others       subtype
  1139.     access      digits       if         out
  1140.     all         do           in                      task
  1141.     and                      is         package      terminate
  1142.     array                               pragma       then
  1143.     at          else                    private      type
  1144.                 elsif        limited    procedure
  1145.                 end          loop
  1146.     begin       entry                   raise        use
  1147.     body        exception               range
  1148.                 exit         mod        record       when
  1149.                                         rem          while
  1150.                              new        renames      with
  1151.     case        for          not        return
  1152.     constant    function     null       reverse      xor
  1153.  
  1154. A reserved word must not be used as a declared identifier.
  1155.  
  1156. Notes:
  1157.  
  1158. Reserved  words  differing only in the use of corresponding upper and lower
  1159. case letters are considered as the same (see 2.3).  In some attributes  the
  1160. identifier  that appears after the apostrophe is identical to some reserved
  1161. word.
  1162.  
  1163. References:  attribute 4.1.4, declaration 3.1, identifier 2.3,  lower  case
  1164. letter 2.1, upper case letter 2.1
  1165.  
  1166.  
  1167.  
  1168.  
  1169. 2.10  Allowable Replacements of Characters
  1170.  
  1171.  
  1172. The  following  replacements  are  allowed for the vertical bar, sharp, and
  1173. quotation basic characters:
  1174.  
  1175.   -  A vertical bar character (|) can be replaced by  an  exclamation  mark
  1176.      (!)  where used as a delimiter.
  1177.  
  1178.   -  The sharp characters (#) of a based literal can be replaced by  colons
  1179.      (:) provided that the replacement is done for both occurrences.
  1180.  
  1181.   -  The quotation characters (") used as string brackets at both ends of a
  1182.      string literal can be replaced by percent characters (%) provided that
  1183.  
  1184.  
  1185.                                   2 - 17
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.      the  enclosed  sequence of characters contains no quotation character,
  1195.      and provided that both string  brackets  are  replaced.   Any  percent
  1196.      character  within  the sequence of characters must then be doubled and
  1197.      each such doubled percent character is interpreted as a single percent
  1198.      character value.
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.                                   2 - 18
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260. These replacements do not change the meaning of the program.
  1261.  
  1262. Notes:
  1263.  
  1264. It is recommended that use of the replacements for the vertical bar, sharp,
  1265. and quotation characters be restricted to  cases  where  the  corresponding
  1266. graphical symbols are not available.  Note that the vertical bar appears as
  1267. a  broken  bar  on  some equipment;  replacement is not recommended in this
  1268. case.
  1269.  
  1270. The rules given for identifiers and numeric literals are  such  that  lower
  1271. case  and  upper  case  letters  can  be used indifferently;  these lexical
  1272. elements can thus be written using only characters of the  basic  character
  1273. set.  If a string literal of the predefined type STRING contains characters
  1274. that  are  not  in  the basic character set, the same sequence of character
  1275. values can be obtained by catenating  string  literals  that  contain  only
  1276. characters  of  the  basic  character set with suitable character constants
  1277. declared in the predefined package ASCII.  Thus the string literal  "AB$CD"
  1278. could  be  replaced  by  "AB" & ASCII.DOLLAR & "CD".  Similarly, the string
  1279. literal "ABcd" with  lower  case  letters  could  be  replaced  by  "AB"  &
  1280. ASCII.LC_C & ASCII.LC_D.
  1281.  
  1282. References:   ascii  predefined  package  C,  based  literal  2.4.2,  basic
  1283. character 2.1, catenation operation 4.5.3, character value 3.5.2, delimiter
  1284. 2.2, graphic character 2.1, graphical symbol 2.1, identifier  2.3,  lexical
  1285. element  2.2,  lower  case  letter 2.1, numeric literal 2.4, string bracket
  1286. 2.6, string literal 2.6, upper case letter 2.1
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.                                   2 - 19
  1318.  
  1319.  
  1320.  
  1321.  
  1322.